//============================================================================
// Name        : build_bin_map.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : C++, Ansi-style
//============================================================================

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <cstring>

#define TAM_MAX_LINHA 1024

using namespace std;

string *load_map(FILE *fl, int *num_linhas_mapa);
int count_lines(FILE *fl);
int **str_map2bin_map(string map[], int num_linhas);

int main(int argc, char** argv) {
	FILE *arquivo;
		char endereco[30];
		if(argc < 2){
		         cout << "Insira o arquivo: (ex: nome_do_arquivo.txt)" << endl;
		         cin >> endereco;
		         cout << endl << endl;
		         //cout << "faltando argumento" << endl;
		}
		else{
		            strcpy(endereco,argv[1]);
		}

		arquivo = fopen(endereco,"r");
		if(arquivo == NULL){ cout << "erro ao abrir arquivo de entrada" << endl; return 0;}

		string *mapa;
		int **bin_map,n_linhas;

		mapa = load_map(arquivo,&n_linhas);
		bin_map = str_map2bin_map(mapa,n_linhas);

		int dimx = n_linhas, dimy = mapa[0].length();

		for(int i=0;i<dimx;i++){
			for(int j=0;j<dimy;j++)
				printf("%d",bin_map[i][j]);
			printf("\n");
		}

	fclose(arquivo);
	for(int i=0;i<dimx;i++)
		delete[] bin_map[i];
	delete[] bin_map;
	delete[] mapa;

	return 0;
}
//------------------------------------------------------------------------------
string *load_map(FILE *fl, int *num_linhas_mapa){
    string *mapa;
    *num_linhas_mapa = count_lines(fl) - 1;
    int i_linha = 0;
    mapa = new string[*num_linhas_mapa];
    char line_temp[TAM_MAX_LINHA];
    rewind(fl);
    while(fgets(line_temp,TAM_MAX_LINHA,fl) != NULL){
        int z = 0;
        while(line_temp[z] != '\r' && line_temp[z] != '\n'){line_temp[z] = tolower(line_temp[z]); z++;}
        line_temp[z] = '\0';
        mapa[i_linha] = line_temp;
        i_linha++;
    }
    return mapa;
}
//------------------------------------------------------------------------------
//conta a quantidade de linhas do arquivo
int count_lines(FILE *fl){
    int linhas = 1;
    char c;
    rewind(fl);

    do{
         c = fgetc(fl);
         if(c == '\n')
           linhas++;

    }while(c != EOF);
    rewind(fl);
    return linhas;
}
//------------------------------------------------------------------------------
void save_binary_map(){


}
//------------------------------------------------------------------------------
int **str_map2bin_map(string map[], int num_linhas){
	int dimx, dimy;
	dimx = num_linhas;
	dimy = map[0].length(); //assume-se q todas as linhas possuem o mesmo tamanho...
	int **bin_map;

	//criando matriz dinamicamente
	bin_map = new int*[dimx];
	for(int i=0;i < dimx;i++)
		bin_map[i] = new int[dimy];

	char *temp = new char[dimy+1];

	for(int i=0;i < dimx;i++){
		strcpy(temp,map[i].c_str());
		for(int j=0;j < dimy;j++){
			if(temp[j] == ' ')
				bin_map[i][j] = 0;
			else if(temp[j] == 's')
				bin_map[i][j] = 5;
			else if(temp[j] == 'e')
				bin_map[i][j] = 3;
			else bin_map[i][j] = 1;
		}
	}

	return bin_map;
}
//------------------------------------------------------------------------------

